# coding=utf-8
"""
作者：董新强 
创建时间：
描述：
"""
import json
import re
from datetime import datetime

_int_pattern = re.compile(r'-?\d+(\.\d+)?')


def time_str(tm):
    if not tm:
        return ''
    if isinstance(tm, str):
        return tm
    try:
        return tm.strftime("%Y-%m-%d %H:%M:%S")
    except:
        return ''


class HttpDocTemplate():
    @staticmethod
    def get_content(url, method, req_params=None, rsp_params=None):
        if not req_params: req_params = {}
        if not rsp_params: rsp_params = {}
        return """

### 【请填写接口名称】
- 备注 ：无
- 一般响应格式:
```JSON
{{
    "status": 0, // status=0 表示请求失败; status=1 表示请求成功; 只有status=1的时候才应使用 data 中的数据
    "data": 消息体(对象或数组,请根据实际情况),
    "msg": "提示信息"
}}
```
---
#### 参数
- Method ：`{0}`
- 请求URL ：`{1}`
- 更新时间 ：{2}
- 请求头部 : 
```JSON
{{
	Authorization : 登陆凭证(如果不需要进行鉴权则不需要该字段),
	content-type: application/json
}}
```
- 请求参数 ：{5}
---
#### 示例
- 请求( {{}} 表示不需请求参数)
```JSON
{3}
```
- 响应
```JSON
{4}
```
---

""".format(method, url, time_str(datetime.now()), HttpDocTemplate.format(req_params), HttpDocTemplate.format(rsp_params), HttpDocTemplate.req_params_fileds(req_params))

    @staticmethod
    def format(data):
        if isinstance(data, (dict, list)):
            return json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)
        return data

    @staticmethod
    def req_params_fileds(req_params_dic: str):
        try:

            dic = json.loads(req_params_dic)
            if not dic: return '无需参数'

            rows = ["|  字段 | 类型  | 说明 | 必填项 |", "| ------------ | ------------ | ------------ | ------------ |"]
            for f, v in dic.items():
                rows.append(f"|  {f} | {HttpDocTemplate.get_type(v)}  | *待补充* | `必填` |")

            return '\n' + '\n'.join(rows)
        except:
            return ''

    @staticmethod
    def get_type(value):
        if isinstance(value, str):
            if value.startswith('['): return '数组'
            if value.startswith('{'): return '对象'
            if _int_pattern.match(value): return '数值'
            return '字符串'
        if isinstance(value, int): return '整数'
        if isinstance(value, float): return '小数'
        if isinstance(value, dict): return '对象'
        if isinstance(value, list): return '数组'
        return type(value)


if __name__ == '__main__':
    url = 'http://127.0.0.1'
    mothod = 'POST'
    req_params = {"name": "小强", "age": 2}
    rsp_params = {"status": 0, "data": {"age": None, "book": []}}
    print(HttpDocTemplate.get_content(url, mothod, req_params, rsp_params))
